body {
    margin: 0;
    padding: 0;
    width: 100vw;
    height: 100vh;
    background-color: #000;
    display: flex;
    justify-content: center;
    align-items: center;
    perspective: 800px;
    transform-style: preserve-3d;

    .wave {
        position: relative;
        margin: 0 auto;
        width: 350px;
        height: 350px;
        perspective: 800px;
        transform-style: preserve-3d;
        transform: rotateX(60deg);

        span {
            position: absolute;
            display: block;
            left: calc(11px * var(--i));
            top: calc(11px * var(--i));
            right: calc(11px * var(--i));
            bottom: calc(11px * var(--i));
            box-sizing: border-box;
            border: 5px solid #fff;
            border-radius: 50%;
            box-shadow: 0 3px 0 #ccc, inset 0 3px 0 #ccc;
            animation: animate 3s ease-in-out infinite;
            animation-delay: calc(0.1s*var(--i));
        }
    }
}

@keyframes animate {
    0% {
        transform: translateZ(-100px);
        opacity: 0.2;
    }

    50% {
        transform: translateZ(100px);
        opacity: 0.8;
    }

    100% {
        transform: translateZ(-100px);
        opacity: 0.2;
    }
}